package com.yizhuoyan.his.service.admin;

import com.yizhuoyan.his.ao.FinExpenseCategoryAo;
import com.yizhuoyan.his.entity.FinExpenseCategoryEntity;
import org.springframework.lang.NonNull;

import java.util.List;

/**
 * 财务收费类别管理服务
 */
public interface FinanceExpenseCategoryManageService {
    /**
     * 添加收费类别
     * @param ao 类别ao
     * @throws NullPointerException 如果ao为null
     * @throws com.yizhuoyan.his.exception.HISIllegalParameterException 如果数据不合法
     * @throws Exception 其他意外
     */
    FinExpenseCategoryEntity addExpenseCategory(FinExpenseCategoryAo ao)throws Exception;
    /**
     * 删除收费类别，
     * 如果id对应记录不存在，此方法什么也不执行
     * @param id 类别id
     * @throws NullPointerException 如果id为null
     * @throws Exception 其他意外
     */
    void removeExpenseCategory(@NonNull Long id)throws Exception;

    /**
     * 修改财务收费类别
     * @param id 需修改记录id
     * @param ao 需修改收费类别全部信息
     *
     * @throws NullPointerException 如果id为null
     * @throws NullPointerException 如果ao为null
     * @throws com.yizhuoyan.his.exception.HISIllegalParameterException 如果数据不合法
     * @throws Exception 其他情况
     */
    void modifyExpenseCategory(@NonNull Long id,@NonNull FinExpenseCategoryAo ao)throws Exception;
    /**
    *  查询指定类别详情
     * @param id 记录id
     * @return 如果记录存在，返回对应记录
     * 如果id不合法或对应记录不存在，返回null
     * @throws NullPointerException 如果id为null
     * @throws Exception 其他情况
     */
    FinExpenseCategoryEntity queryExpenseCategory(@NonNull Long id)throws Exception;

    /**
     * 模糊查询类别
     * @param key 查询关键字
     * @return 满足查询条件的所有记录
     * 如key为null，则返回所有记录
     * 如果无满足条件结果，则返回空集合，即方法结果永不为null
     * @throws Exception 其他情况
     */
    @NonNull List<FinExpenseCategoryEntity> queryExpenseCategoriesByKey(String key)throws Exception;

    /**
     *判断类别代号是否可用
     * @param code  需判断类别代号
     * 如果格式不合法，也表示不可用
     * 如果已存在，也表示不可用
     * @throws NullPointerException 如果id为null
     * @throws com.yizhuoyan.his.exception.HISIllegalParameterException 如果格式不合法
     * @throws com.yizhuoyan.his.exception.HISDataExistsException 如果已存在
     * @throws Exception 其他情况
     */
    void validateExpenseCategoryCodeValid(String code)throws Exception;

}

